package saei.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import saei.bean.Cpu;
import saei.bean.Equipo;
import saei.bean.Usuario;
import saei.bean.vo.CpuVO;
import saei.bean.vo.EquipoVO;
import saei.bean.vo.UsuarioVO;
import saei.service.ServiciosEquipo;
import saei.service.ServiciosEstado;
import saei.service.ServiciosPlanRotacion;
import saei.service.ServiciosUsuario;
import saei.utils.GeneradorPdf;
import saei.utils.SessionUtils;

public class RotarEquipoServlet extends ServletBase {
	private static final long serialVersionUID = 1L;
       
    public RotarEquipoServlet() {
        super("/RotarEquipo.jsp","/RotarEquipo.jsp");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		mensajeError = null;
		mensajeExito = null;
		
		request.getSession().removeAttribute("values");
		
		cargarDatos(request);
		
		redirect(request, response);
	}
    
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String loginUsuario = request.getParameter("loginUsuario");
		String numSerieCpu = request.getParameter("numSerieCpu");
		
		if (loginUsuario == null || loginUsuario == "") {
			mensajeError = "Seleccione un usuario";
		}
		
		if (numSerieCpu == null || numSerieCpu == "") {
			mensajeError = "Seleccione un nuevo equipo";
		}
		
		CpuVO equipoViejo = null;
		try {
			if (mensajeError == null) {
				equipoViejo = ServiciosPlanRotacion.rotarEquipo(loginUsuario, numSerieCpu);
				
				Cpu equipoNuevo = ServiciosEquipo.buscarCpu(numSerieCpu);
				Usuario usuario = ServiciosUsuario.buscar(loginUsuario);
				
				GeneradorPdf.generarInformeRotacion(response, 
						SessionUtils.getLogedUser(request.getSession()).getVO(), 
						usuario.getVO(), equipoViejo, equipoNuevo.getVO());
				return;
			}
		} catch (Exception e) {
			mensajeError = e.getMessage();
			cargarDatos(request);
			redirect(request, response);
		}
	}

	protected void cargarDatos(HttpServletRequest request) {
		List<EquipoVO> cpu = new ArrayList<EquipoVO>();
		List<Equipo> equiposSinAsignar = ServiciosEquipo.buscarEquiposConEstado(ServiciosEstado.EstadoSinAsignar());
		for (Equipo equipo : equiposSinAsignar) {
			if (equipo.getClass() == Cpu.class) {
				cpu.add(equipo.getVO());
			}
		}
		request.getSession().setAttribute("cpuDisponibles", cpu);
		
		List<Usuario> usuarios = ServiciosPlanRotacion.buscarUsuariosConRotacionPendiente();
		List<UsuarioVO> usuariosVo = new ArrayList<UsuarioVO>();
		for (Usuario usuario : usuarios) {
			usuariosVo.add(usuario.getVO());
		}
		request.getSession().setAttribute("usuarioDisponibles", usuariosVo);
	}
}
